﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Classes_and_Interfaces;

namespace ClassicHarmony
{
    class StartApplication
    {
        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        // КОНСТАНТЫ ////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////

        const int BASS = 0, TENOR = 1, ALT = 2, SOPRANO = 3;
        const int I = 1, II = 2, III = 3, IV = 4, V = 5, VI = 6, VII = 0;
        
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            string testVoice = "", testStupen = "", testBasis = "", testFunction = "", testRaspologenie = "";
            int testVoiceInt=0, testStupenInt=0, testBasisInt=0;
            string option="";
            for (; (option!="y") ; )
            {
                if (option != "r")
                {
                    Console.WriteLine("================================================================");
                    Console.WriteLine("================================================================");
                    Console.WriteLine(); Console.WriteLine("==== Задаем ноту ===================================");

                    Console.Write("Введите голос (soprano/alt/tenor/bass) : "); testVoice = Console.ReadLine();
                    switch (testVoice)
                    {
                        case "soprano": testVoiceInt = SOPRANO; break;
                        case "alt": testVoiceInt = ALT; break;
                        case "tenor": testVoiceInt = TENOR; break;
                        case "bass": testVoiceInt = BASS; break;
                        default:        //сюда попадаем в случае ввода некорректных данных
                            for (; (testVoice != "soprano") && (testVoice != "alt") && (testVoice != "tenor") && (testVoice != "bass"); )
                            {
                                Console.WriteLine("==  Ошибка ввода! Повторите ввод  == ");
                                Console.Write("Введите голос (soprano/alt/tenor/bass) : ");
                                testVoice = Console.ReadLine();
                            }
                            break;

                    }

                    Console.Write("Введите ступень (I/II/III/IV/V/VI/VII) : "); testStupen = Console.ReadLine();
                    switch (testStupen)
                    {
                        case "I": testStupenInt = I; break;
                        case "II": testStupenInt = II; break;
                        case "III": testStupenInt = III; break;
                        case "IV": testStupenInt = IV; break;
                        case "V": testStupenInt = V; break;
                        case "VI": testStupenInt = VI; break;
                        case "VII": testStupenInt = VII; break;
                        default:    //сюда попадаем в случае ввода некорректных данных
                            for (; (testStupen != "I") && (testStupen != "II") && (testStupen != "III") && (testStupen != "IV") &&
                                (testStupen != "V") && (testStupen != "VI") && (testStupen != "VII"); )
                            {
                                Console.WriteLine("==  Ошибка ввода! Повторите ввод  == ");
                                Console.Write("Введите ступень (I/II/III/IV/V/VI/VII) : ");
                                testStupen = Console.ReadLine();
                            }
                            break;
                    }

                    Console.WriteLine(); Console.WriteLine("==== Задаем гармонию ===============================");

                    Console.Write("Введите базис(основной тон) (I/II/III/IV/V/VI/VII) : "); testBasis = Console.ReadLine();
                    switch (testBasis)
                    {
                        case "I": testBasisInt = I; break;
                        case "II": testBasisInt = II; break;
                        case "III": testBasisInt = III; break;
                        case "IV": testBasisInt = IV; break;
                        case "V": testBasisInt = V; break;
                        case "VI": testBasisInt = VI; break;
                        case "VII": testBasisInt = VII; break;
                        default:    //сюда попадаем в случае ввода некорректных данных
                            for (; (testBasis != "I") && (testBasis != "II") && (testBasis != "III") && (testBasis != "IV") && (testBasis != "V") &&
                                (testBasis != "VI") && (testBasis != "VII"); )
                            {
                                Console.WriteLine("==  Ошибка ввода! Повторите ввод  == ");
                                Console.Write("Введите базис(основной тон) (I/II/III/IV/V/VI/VII) : ");
                                testBasis = Console.ReadLine();
                            }
                            break;
                    }

                    Console.Write("Введите функцию (53/6/7/...) : "); testFunction = Console.ReadLine();
                    //если введем неподдерживаемую функцию попросить ввести еще раз, предоставить возможность выхода  
                    for (; (testFunction != "53") && (testFunction != "6") && (testFunction != "64") && (testFunction != "exit")
                         &&(testFunction != "7") && (testFunction != "65") && (testFunction != "43") && (testFunction != "2"); )
                    {
                        Console.WriteLine("==             Эта функция не поддерживается!             ==");
                        Console.WriteLine("==            Повторите ввод или введите 'exit'           ==");
                        Console.Write("Введите функцию (53/6/7/...) : "); testFunction = Console.ReadLine();
                        if (testFunction == "exit") break; //возможность выхода из режима ввода
                    }
                    

                    Console.Write("Введите расположение(тесное, широкое, смешанное) : "); testRaspologenie = Console.ReadLine();
                    //если введем неподдерживаемое расположение, попросить ввести еще раз, предоставить возможность выхода  
                    for (; (testRaspologenie != "тесное") && (testRaspologenie != "широкое") && (testRaspologenie != "смешанное"); )
                    {
                        Console.WriteLine("==           Это расположение не поддерживается!             ==");
                        Console.WriteLine("==            Повторите ввод или введите 'exit'           ==");
                        Console.Write("Введите расположение(тесное, широкое, смешанное) : "); testRaspologenie = Console.ReadLine();
                        if (testRaspologenie == "exit") break; //возможность выхода из режима ввода
                    }
                    
                }

                Console.WriteLine();

                Note o = new Note(testVoiceInt, testStupenInt, null);
                Harmony h = new Harmony(o, testBasisInt, testFunction,testRaspologenie);
                h.showHarmony();
                
                Console.WriteLine(); 
                Console.WriteLine("Для выхода нажми 'y' и enter;\n"+
                                  "Чтобы постороить еще раз с теми же параметрами нажми 'r' и enter;\n"+
                                  "Для повторного вввода параметров просто enter");
                Console.WriteLine();
                option = Console.ReadLine();
            }
            

            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new MainForm());
        }
    }
}
